

package com.hazelcast.internal.serialization.impl.defaultserializers;

import com.hazelcast.internal.compatibility.serialization.impl.CompatibilitySerializationConstants;
import com.hazelcast.internal.serialization.impl.SerializationConstants;
import com.hazelcast.nio.ObjectDataInput;

import java.io.IOException;
import java.util.ArrayList;

/**
 * The {@link ArrayList} serializer
 */
public class ArrayListStreamSerializer<E> extends AbstractCollectionStreamSerializer<ArrayList<E>> {

    /**
     * Determines if ser-de should conform the 3.x format
     */
    private final boolean isCompatibility;

    public ArrayListStreamSerializer(boolean isCompatibility) {
        this.isCompatibility = isCompatibility;
    }

    @Override
    public int getTypeId() {
        return isCompatibility ? CompatibilitySerializationConstants.JAVA_DEFAULT_TYPE_ARRAY_LIST : SerializationConstants.JAVA_DEFAULT_TYPE_ARRAY_LIST;
    }

    @Override
    public ArrayList<E> read(ObjectDataInput in) throws IOException {
        int size = in.readInt();

        ArrayList<E> collection = new ArrayList<>(size);

        return deserializeEntries(in, size, collection);
    }
}
